package com.shenfa.service.systemManager.person;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import com.bank.sdb.util.encryption.PasswordEncryption;
import com.shenfa.bean.Emprole;
import com.shenfa.bean.Person;
import com.shenfa.dao.EmproleDao;
import com.shenfa.dao.systemManager.person.PersonDao;
import com.shenfa.util.sequence.SequenceUtil;

public class PersonService {
	
	@Autowired
	private PersonDao personDao;
	@Autowired
	private EmproleDao emproleDao;
	@Autowired
	private SequenceUtil sequenceUtil;
	/**
	 * 根据用户名获取对象
	 * @param loginName
	 * @param loginPsw 
	 */
	public Person getByLoginNamePsw(Map<String, String> map) {
		return personDao.getByLoginNamePsw(map);
	}

	/**
	 * 添加用户
	 * @param person
	 */
	public void add(Person person) {
		//获取人员ID
		String id=sequenceUtil.getSequence(4);
		if(null==id){
			return;
		}
		person.setId(id);
		
		String psd =person.getPassword();
		if(null == psd){
			return;
		}
		person.setPassword(PasswordEncryption.encrypt(psd));
		System.out.println("=====PasswordEncryption===="+PasswordEncryption.encrypt(psd));
		
		personDao.add(person);
		if("".equals(person.getDepNo()) || "".equals(person.getRoleNo())){
			return;
		}
		Emprole emprole=new Emprole();
		emprole.setPid(id);//设置人员ID
		emprole.setDid(person.getDepNo());//设置部门ID
		emprole.setRid(person.getRoleNo());//设置角色ID
		String count=emproleDao.isExist(emprole);
		if("0".equals(count)){
			personDao.addEmprole(person);
		}

	}

	/**
	 * 登录状态修改
	 * 
	 * @param person
	 */
	public int logStateUp(Person person){
		return personDao.update(person);
	}	
	
	/**
	 * 修改用户信息
	 * @param person
	 */
	public void update(Person person) {
		if(personDao.update(person)<0){
			return;
		}
		if(null==person.getRoleNo() || "".equals(person.getRoleNo())){
			//删除人员角色关联关系
			emproleDao.delRoleByUid(person.getId());
		}else{
			Emprole emprole=new Emprole();
			emprole.setPid(person.getId());//设置人员ID
			//emprole.setRid(person.getRoleNo());//设置角色ID
			//查询该用户是否已经设置了角色
			String count=emproleDao.isExist(emprole);
			if("0".equals(count)){
				personDao.addEmprole(person);//创建一个关系
			}else{
				personDao.updataEmprole(person);//更新人员角色关系
			}
		}
	}
	/**
	 * 删除用户
	 * @param person
	 */
	public void del(Person person){
		if(personDao.del(person.getId())<0){
			return;
		}
	}
	
	/**
	 * 验证角色是否绑定用户
	 * @param role
	 * @return
	 */
	public String checkDelPerson(Emprole role) {
		return emproleDao.checkDelPerson(role);
	}
	/**
	 * 获取所有用户
	 * @return
	 */
	public List<Person> getAll() {
		return personDao.getAll();
	}
	/**
	 *根据用户名获取对应的用户对象
	 * @return
	 */
	public Person getPersonBynm(String username){
		return personDao.personBynm(username);
	}
	/**
	 * 查询用户的所有相关信息
	 * @param personNo
	 * @return
	 */
	public Person getPersonInfos(String personNo){
		return personDao.personInfos(personNo);
	}
	
	/**
	 * 查询部门下的所属用户
	 * @param person
	 * @return
	 */
	public List<Person> listByDepart(Person person,int start,int limit){
		//查询结果不包含角色信息
		List<Person> listp=personDao.listByDepart(person,start,limit);
		Emprole emprole;
		Person p;
		for(int i=0;i<listp.size();i++){
			p=listp.get(i);
			//查询角色名称
			emprole=emproleDao.getEmproleByPidDid(p.getId(),p.getDepNo());
			if(null!=emprole){
				listp.get(i).setRoleName(emprole.getRname());
				listp.get(i).setRoleNo(emprole.getRid());
			}
		}
		return listp;
	}
	public int queryCount(Person person){
		return personDao.queryCountByDepart(person);
	}

	public int checkPerson(String name) {
		return personDao.checkPersonName(name);
	}
}
